]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
system: Use the username if the user's name is too long
authorJasper St. Pierre <jstpierre@mecheye.net>
Mon, 12 Aug 2013 10:56:51 +0000 (06:56 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Tue, 13 Aug 2013 10:50:24 +0000 (06:50 -0400)
This is a part of the new system status design, see
https://wiki.gnome.org/GnomeShell/Design/Guidelines/SystemStatus/
for design details.

https://bugzilla.gnome.org/show_bug.cgi?id=705845

js/ui/status/system.js

index a4674c7f0459c08b7edf530ab1420f64f4bbc12a..74eb002664702847d13970af9434cf2f8f47e666 100644 (file)
@@ -152,6 +152,17 @@ const Indicator = new Lang.Class({
 
     _updateSwitchUserSubMenu: function() {
         this._switchUserSubMenu.label.text = this._user.get_real_name();
+        let clutterText = this._switchUserSubMenu.label.clutter_text;
+
+        // XXX -- for some reason, the ClutterText's width changes
+        // rapidly unless we force a relayout of the actor. Probably
+        // a size cache issue or something. Moving this to be a layout
+        // manager would be a much better idea.
+        clutterText.get_allocation_box();
+
+        let layout = clutterText.get_layout();
+        if (layout.is_ellipsized())
+            this._switchUserSubMenu.label.text = this._user.get_user_name();
 
         let iconFile = this._user.get_icon_file();
         if (iconFile && !GLib.file_test(iconFile, GLib.FileTest.EXISTS))
@@ -210,6 +221,15 @@ const Indicator = new Lang.Class({
         this._switchUserSubMenu = new PopupMenu.PopupSubMenuMenuItem('', true);
         this._switchUserSubMenu.icon.style_class = 'system-switch-user-submenu-icon';
 
+        // Since the label of the switch user submenu depends on the width of
+        // the popup menu, and we can't easily connect on allocation-changed
+        // or notify::width without creating layout cycles, simply update the
+        // label whenever the menu is opened.
+        this.menu.connect('open-state-changed', Lang.bind(this, function(menu, isOpen) {
+            if (isOpen)
+                this._updateSwitchUserSubMenu();
+        }));
+
         item = new PopupMenu.PopupMenuItem(_("Switch User"));
         item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
         this._switchUserSubMenu.menu.addMenuItem(item);